Hadoop এর MapReduce প্রোগ্রামিং মডেল ডিস্ট্রিবিউটেড ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি দুটি প্রধান ধাপে কাজ করে: Map এবং Reduce। একটি MapReduce প্রোগ্রাম তৈরি করার জন্য সাধারণত তিনটি ক্লাস ব্যবহার করা হয়: Mapper, Reducer, এবং Driver। এখানে একটি সাধারণ MapReduce প্রোগ্রাম তৈরি করার প্রক্রিয়া এবং এর উপাদানগুলো নিয়ে আলোচনা করা হবে।
MapReduce প্রোগ্রামের কাজ
ধরা যাক, আমাদের একটি টেক্সট ফাইল আছে, এবং আমাদের কাজ হলো প্রতিটি শব্দের সংখ্যা গোনা। এই কাজটি একটি সহজ MapReduce প্রোগ্রামের মাধ্যমে করা যাবে। এখানে Map ধাপে প্রতিটি শব্দকে চিহ্নিত করা হবে এবং Reduce ধাপে শব্দের পরিমাণ যোগ করা হবে।
প্রোগ্রামটির উপাদান
1. Mapper Class
Mapper ক্লাসটি প্রতিটি ইনপুট রেকর্ড থেকে কীগুলি বের করে এবং তার সাথে মান প্রদান করে। উদাহরণস্বরূপ, আমাদের টেক্সট ফাইলের প্রতিটি শব্দকে একটি কীগুলির সাথে সম্পর্কিত মান হিসেবে নির্ধারণ করা হবে।
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class WordCountMapper extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
// টেক্সট লাইনটি স্প্লিট করে শব্দে পরিণত করা
String[] words = value.toString().split("\\s+");
// প্রতিটি শব্দের জন্য, একটি কীগুলির সাথে মান পাঠানো
for (String wordStr : words) {
word.set(wordStr);
context.write(word, one); // কীগুলি (word) এবং মান (1)
}
}
}
2. Reducer Class
Reducer ক্লাসটি Mapper থেকে প্রাপ্ত কীগুলি গ্রহণ করে এবং তাদের মানগুলির উপর অপারেশন করে। আমাদের ক্ষেত্রে, Reducer ক্লাসটি প্রতিটি শব্দের সংখ্যা যোগ করবে।
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
// শব্দের প্রতি মোট মান যোগ করা
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result); // ফলাফল পাঠানো
}
}
3. Driver Class
Driver ক্লাসটি আপনার MapReduce প্রোগ্রামটি চালাতে ব্যবহৃত হয়। এটি Mapper এবং Reducer কে নির্ধারণ করে, ইনপুট এবং আউটপুট ফাইল সেট করে এবং টাস্কটি চালানোর জন্য কনফিগারেশন প্রদান করে।
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCountDriver {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: WordCount <input path> <output path>");
System.exit(-1);
}
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "Word Count");
// Driver class, Mapper class এবং Reducer class নির্ধারণ
job.setJarByClass(WordCountDriver.class);
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
// আউটপুট কীরূপ হবে তা নির্ধারণ
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
// ইনপুট এবং আউটপুট ফাইল নির্ধারণ
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
// কাজটি চলানো
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
প্রোগ্রামটি চালানোর প্রক্রিয়া
- JAR ফাইল তৈরি করুন: প্রথমে আপনার প্রোগ্রামটি একটি JAR ফাইলে কম্পাইল করুন।
javac -classpath `hadoop classpath` -d /path/to/classes /path/to/WordCountDriver.java /path/to/WordCountMapper.java /path/to/WordCountReducer.java
jar -cvf wordcount.jar -C /path/to/classes .
- Hadoop ক্লাস্টারে প্রোগ্রামটি চালান: এরপর Hadoop ক্লাস্টারে প্রোগ্রামটি চালাতে হবে। এটি করতে কমান্ড লাইনে গিয়ে নিচের কমান্ডটি রান করুন।
hadoop jar wordcount.jar WordCountDriver /input/path /output/path
এখানে /input/path হলো ইনপুট ডেটা ফাইলের লোকেশন এবং /output/path হলো আউটপুট ফোল্ডারের লোকেশন।
সারাংশ
এই প্রোগ্রামটি একটি সহজ MapReduce প্রোগ্রাম যা একটি টেক্সট ফাইল থেকে প্রতিটি শব্দের গুনফল (count) বের করে। Map ধাপে শব্দগুলো প্রক্রিয়া করা হয় এবং Reduce ধাপে সেই শব্দের গুনফল যোগ করা হয়। Hadoop এর এই প্রোগ্রামের মাধ্যমে আপনি ডিস্ট্রিবিউটেড কম্পিউটিংয়ে কাজ করতে শিখেছেন এবং এটি কীভাবে Hadoop এ কাজ করে তার একটি সাধারণ ধারণা পেয়েছেন।
Read more